package registratiesysteem;

import java.awt.Color;
import javax.swing.JComboBox;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.ArrayList;
import java.util.Scanner;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * UitleningenInvoerScherm.java
 *
 * Created on 2-jan-2010, 12:27:19
 */

/**
 *
 * @author Martin
 */
class UitleningenInvoerScherm extends javax.swing.JFrame {

    final static int ID = 0;
    final static int LIDNUMMER = 1;
    final static int CODE = 2;
    final static int UITLEENDATUM = 3;
    final static int VERLOOPDATUM = 4;
    final static int INLEVERDATUM = 5;
    final static int BIJZONDERHEDEN = 6;
    final static int UITLENING_SIZE = 7;

    private Uitlening uitlening;
    private String[] queries = {"u.id = ?",
                                "u.fk_lidnr = ?",
                                "u.fk_code = ?",
                                "u.uitleendatum = ?",
                                "u.verloopdatum = ?",
                                "u.inleverdatum = ?",
                                "u.bijzonderheden = ?" };
    private int hash;

    /** Creates new form UitleningenInvoerScherm */
    UitleningenInvoerScherm(BeheerMenu hetParentMenu) {
        initComponents();
        parentMenu = hetParentMenu;
        parentMenu.initDatumVelden(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar);
        parentMenu.initDatumVelden(jcbVerloopdatumDag, jcbVerloopdatumMaand, jcbVerloopdatumJaar);
        parentMenu.initDatumVelden(jcbInleverdatumDag, jcbInleverdatumMaand, jcbInleverdatumJaar);
    }

    void initialiseerInvoerScherm(BeheerMenu.BewerkFunctie hetSoortBewerking) {
        soortBewerking = hetSoortBewerking;
        wisVelden();

        switch(soortBewerking) {
            case TOEVOEGEN:
                jlTitel.setText("Uitlening toevoegen");
                jtfLidnummer.setEnabled(true);
                jbZoekLid.setEnabled(true);
                jcbUitleendatumDag.setEnabled(true);
                jcbUitleendatumMaand.setEnabled(true);
                jcbUitleendatumJaar.setEnabled(true);
                jtfSpeelgoedCode.setEnabled(true);
                jbZoekSpeelgoedCode.setEnabled(true);
                jcbVerloopdatumDag.setEnabled(true);
                jcbVerloopdatumMaand.setEnabled(true);
                jcbVerloopdatumJaar.setEnabled(true);
                jcbInleverdatumDag.setEnabled(false);
                jcbInleverdatumMaand.setEnabled(false);
                jcbInleverdatumJaar.setEnabled(false);
                parentMenu.setDatumVandaag(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar);
                jtaBijzonderheden.setEnabled(true);
                jlLidnummer.setText("Lidnummer*");
                jlUitleendatum.setText("Uitleendatum*");
                jlSpeelgoedCode.setText("Speelgoedcode*");
                jlVerloopdatum.setText("Verloopdatum*");
                jbOpslaan.setText("Opslaan");
                parentMenu.setStatusbarText(jlStatusbar, "Velden met een * zijn verplicht.", Color.BLACK);
                break;
            case WIJZIGEN:
            case VERWIJDEREN:
            case ZOEKEN:
                jlTitel.setText("Uitlening zoeken");
                jtfLidnummer.setEnabled(true);
                jbZoekLid.setEnabled(true);
                jcbUitleendatumDag.setEnabled(true);
                jcbUitleendatumMaand.setEnabled(true);
                jcbUitleendatumJaar.setEnabled(true);
                jtfSpeelgoedCode.setEnabled(true);
                jbZoekSpeelgoedCode.setEnabled(true);
                jcbVerloopdatumDag.setEnabled(false);
                jcbVerloopdatumMaand.setEnabled(false);
                jcbVerloopdatumJaar.setEnabled(false);
                jcbInleverdatumDag.setEnabled(false);
                jcbInleverdatumMaand.setEnabled(false);
                jcbInleverdatumJaar.setEnabled(false);
                jtaBijzonderheden.setEnabled(false);
                jlLidnummer.setText("Lidnummer");
                jlUitleendatum.setText("Uitleendatum");
                jlSpeelgoedCode.setText("Speelgoedcode");
                jlVerloopdatum.setText("Verloopdatum");
                jbOpslaan.setText("Zoeken");
                parentMenu.setStatusbarText(jlStatusbar, "Geef een of meerdere zoekcriteria op.", Color.BLACK);
                break;
            case LID_OVERZICHT:
                jlTitel.setText("Lid uitleningen overzicht");
                jtfLidnummer.setEnabled(true);
                jbZoekLid.setEnabled(true);
                jcbUitleendatumDag.setEnabled(true);
                jcbUitleendatumMaand.setEnabled(true);
                jcbUitleendatumJaar.setEnabled(true);
                jtfSpeelgoedCode.setEnabled(false);
                jbZoekSpeelgoedCode.setEnabled(false);
                jcbVerloopdatumDag.setEnabled(false);
                jcbVerloopdatumMaand.setEnabled(false);
                jcbVerloopdatumJaar.setEnabled(false);
                jcbInleverdatumDag.setEnabled(false);
                jcbInleverdatumMaand.setEnabled(false);
                jcbInleverdatumJaar.setEnabled(false);
                jtaBijzonderheden.setEnabled(false);
                jlLidnummer.setText("Lidnummer*");
                jlUitleendatum.setText("Uitleendatum");
                jlSpeelgoedCode.setText("Speelgoedcode");
                jlVerloopdatum.setText("Verloopdatum");
                jbOpslaan.setText("Toon");
                parentMenu.setStatusbarText(jlStatusbar, "Geef een lidnr voor een uitleningen per lid overzicht", Color.BLACK);
                break;
            case SPEELGOED_OVERZICHT:
                jlTitel.setText("Speelgoed uitleningen overzicht");
                jtfLidnummer.setEnabled(false);
                jbZoekLid.setEnabled(false);
                jcbUitleendatumDag.setEnabled(false);
                jcbUitleendatumMaand.setEnabled(false);
                jcbUitleendatumJaar.setEnabled(false);
                jtfSpeelgoedCode.setEnabled(true);
                jbZoekSpeelgoedCode.setEnabled(true);
                jcbVerloopdatumDag.setEnabled(false);
                jcbVerloopdatumMaand.setEnabled(false);
                jcbVerloopdatumJaar.setEnabled(false);
                jcbInleverdatumDag.setEnabled(false);
                jcbInleverdatumMaand.setEnabled(false);
                jcbInleverdatumJaar.setEnabled(false);
                jtaBijzonderheden.setEnabled(false);
                jlLidnummer.setText("Lidnummer");
                jlUitleendatum.setText("Uitleendatum");
                jlSpeelgoedCode.setText("Speelgoedcode*");
                jlVerloopdatum.setText("Verloopdatum");
                jbOpslaan.setText("Toon");
                parentMenu.setStatusbarText(jlStatusbar, "Geef een speelgoed code voor een speelgoed uitleningen overzicht", Color.BLACK);
        }
    }

    void initialiseerInvoerScherm(BeheerMenu.BewerkFunctie hetSoortBewerking, Uitlening u) {
        soortBewerking = hetSoortBewerking;
        switch(soortBewerking) {
            case WIJZIGEN:
                jlTitel.setText("Uitlening wijzigen");
                jtfLidnummer.setEnabled(true);
                jbZoekLid.setEnabled(true);
                jcbUitleendatumDag.setEnabled(true);
                jcbUitleendatumMaand.setEnabled(true);
                jcbUitleendatumJaar.setEnabled(true);
                jtfSpeelgoedCode.setEnabled(true);
                jbZoekSpeelgoedCode.setEnabled(true);
                jlSpeelgoedCode.setEnabled(true);
                jcbVerloopdatumDag.setEnabled(true);
                jcbVerloopdatumMaand.setEnabled(true);
                jcbVerloopdatumJaar.setEnabled(true);
                jcbInleverdatumDag.setEnabled(true);
                jcbInleverdatumMaand.setEnabled(true);
                jcbInleverdatumJaar.setEnabled(true);
                jtaBijzonderheden.setEnabled(true);
                jlLidnummer.setText("Lidnummer");
                jlUitleendatum.setText("Uitleendatum");
                jlSpeelgoedCode.setText("Speelgoedcode");
                jlVerloopdatum.setText("Verloopdatum*");
                jbOpslaan.setText("Wijzigen");
                parentMenu.setStatusbarText(jlStatusbar, "Wijzigingen aanbrengen en opslaan, velden met een * zijn verplicht.", Color.BLACK);
                break;
            case VERWIJDEREN:
                jlTitel.setText("Uitlening verwijderen");
                jtfLidnummer.setEnabled(false);
                jbZoekLid.setEnabled(true);
                jcbUitleendatumDag.setEnabled(false);
                jcbUitleendatumMaand.setEnabled(false);
                jcbUitleendatumJaar.setEnabled(false);
                jtfSpeelgoedCode.setEnabled(false);
                jbZoekSpeelgoedCode.setEnabled(true);
                jcbVerloopdatumDag.setEnabled(false);
                jcbVerloopdatumMaand.setEnabled(false);
                jcbVerloopdatumJaar.setEnabled(false);
                jcbInleverdatumDag.setEnabled(false);
                jcbInleverdatumMaand.setEnabled(false);;
                jcbInleverdatumJaar.setEnabled(false);
                jtaBijzonderheden.setEnabled(false);
                jlLidnummer.setText("Lidnummer");
                jlUitleendatum.setText("Uitleendatum");
                jlSpeelgoedCode.setText("Speelgoedcode");
                jlVerloopdatum.setText("Verloopdatum");
                jbOpslaan.setText("Verwijderen");
                parentMenu.setStatusbarText(jlStatusbar, "Klik op Verwijderen om de uitlening te verwijderen.", Color.BLACK);
        }
        toonUitlening(u);
    }

    private void wisVelden() {
        jtfLidnummer.setText(null);
        jtfSpeelgoedCode.setText(null);
        jcbUitleendatumDag.setSelectedIndex(0);
        jcbUitleendatumMaand.setSelectedIndex(0);
        jcbUitleendatumJaar.setSelectedIndex(0);
        jcbVerloopdatumDag.setSelectedIndex(0);
        jcbVerloopdatumMaand.setSelectedIndex(0);
        jcbVerloopdatumJaar.setSelectedIndex(0);
        jcbInleverdatumDag.setSelectedIndex(0);
        jcbInleverdatumMaand.setSelectedIndex(0);
        jcbInleverdatumJaar.setSelectedIndex(0);
        jtaBijzonderheden.setText(null);
    }

    private int getHash()
    {
        int h = 0;

        h += jtfLidnummer.getText().hashCode();
        h += jtfSpeelgoedCode.getText().hashCode();
        h += jcbUitleendatumDag.getSelectedItem().hashCode();
        h += jcbUitleendatumMaand.getSelectedItem().hashCode();
        h += jcbUitleendatumJaar.getSelectedItem().hashCode();
        h += jcbVerloopdatumDag.getSelectedItem().hashCode();
        h += jcbVerloopdatumMaand.getSelectedItem().hashCode();
        h += jcbVerloopdatumJaar.getSelectedItem().hashCode();
        h += jcbInleverdatumDag.getSelectedItem().hashCode();
        h += jcbInleverdatumMaand.getSelectedItem().hashCode();
        h += jcbInleverdatumJaar.getSelectedItem().hashCode();
        h += jtaBijzonderheden.getText().hashCode();
        return h;
    }

    private void parseQuery(Uitlening u)
    {
        ArrayList<Integer> index = new ArrayList<Integer>();
        String q = "update uitlening u set ";
        int size, attribute;

        if (u == null)
            return;
        for (int i = 0; i < UITLENING_SIZE; ++i)
        {
            switch (i)
            {
                case LIDNUMMER:
                    if (u.getLidnummer() != uitlening.getLidnummer())
                        index.add(i);
                    break;
                case CODE:
                    if (!u.getSpeelgoedCode().equals(uitlening.getSpeelgoedCode()))
                        index.add(i);
                    break;
                case UITLEENDATUM:
                    if (!u.getUitleendatum().equals(uitlening.getUitleendatum()))
                        index.add(i);
                    break;
                case VERLOOPDATUM:
                    if (!u.getVerloopdatum().equals(uitlening.getVerloopdatum()))
                        index.add(i);
                    break;
                case INLEVERDATUM:
                    if (u.getInleverdatum() != null && !u.getInleverdatum().equals(uitlening.getInleverdatum()))
                        index.add(i);
                    else if (u.getInleverdatum() != null || uitlening.getInleverdatum() != null)
                        index.add(i);
                    break;
                case BIJZONDERHEDEN:
                    if (u.getBijzonderheden() != null && !u.getBijzonderheden().equals(uitlening.getBijzonderheden()))
                        index.add(i);
                    else if (u.getBijzonderheden() != null || uitlening.getBijzonderheden() != null)
                        index.add(i);
                    break;
            }
        }
        size = index.size();
        for (int i = 0; i < size; ++i)
        {
            attribute = index.get(i);
            q += queries[attribute];
            if (i + 1 < size)
                q += ", ";
            else
                q += " ";
        }
        q += "where u.fk_lidnr = ? and u.fk_code = ? and u.uitleendatum = ?";
        parentMenu.databaseConnectie.prepareStatement(q);
        for (int i = 0; i < size; ++i)
        {
            attribute = index.get(i);
            switch (attribute)
            {
                case LIDNUMMER:
                    parentMenu.databaseConnectie.setInt(i + 1, u.getLidnummer());
                    break;
                case CODE:
                    parentMenu.databaseConnectie.setString(i + 1, u.getSpeelgoedCode());
                    break;
                case UITLEENDATUM:
                    parentMenu.databaseConnectie.setString(i + 1, u.getUitleendatum());
                    break;
                case VERLOOPDATUM:
                    parentMenu.databaseConnectie.setString(i + 1, u.getVerloopdatum());
                    break;
                case INLEVERDATUM:
                    parentMenu.databaseConnectie.setString(i + 1, u.getInleverdatum());
                    break;
                case BIJZONDERHEDEN:
                    parentMenu.databaseConnectie.setString(i + 1, u.getBijzonderheden());
                    break;
            }
        }
        parentMenu.databaseConnectie.setInt(size + 1, uitlening.getLidnummer());
        parentMenu.databaseConnectie.setString(size + 2, uitlening.getSpeelgoedCode());
        parentMenu.databaseConnectie.setString(size + 3, uitlening.getUitleendatum());
        System.out.printf("Parsed update query is: %s\n", q);
    }

    private boolean valideerVerloopdatum()
    {
        GregorianCalendar gcVerloopdatum, gcUitleendatum;
        int dag = jcbVerloopdatumDag.getSelectedIndex();
        int maand = jcbVerloopdatumMaand.getSelectedIndex() - 1;
        int d, m, j, uitleenJaar;
        String jaar = (String)jcbVerloopdatumJaar.getSelectedItem();

        if (parentMenu.maakDatumString(jcbVerloopdatumDag, jcbVerloopdatumMaand, jcbVerloopdatumJaar) != null) {
            gcVerloopdatum = new GregorianCalendar(Integer.parseInt(jaar), maand, dag);
            dag = jcbUitleendatumDag.getSelectedIndex();
            maand = jcbUitleendatumMaand.getSelectedIndex() - 1;
            jaar = (String)jcbUitleendatumJaar.getSelectedItem();
            if (parentMenu.maakDatumString(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar) != null) {
                gcUitleendatum = new GregorianCalendar(Integer.parseInt(jaar), maand, dag);
                if (gcUitleendatum != null && gcVerloopdatum.after(gcUitleendatum)) {
                    d = gcVerloopdatum.get(Calendar.DAY_OF_MONTH);
                    m = gcVerloopdatum.get(Calendar.MONTH);
                    j = gcVerloopdatum.get(Calendar.YEAR);
                    uitleenJaar = Integer.parseInt(jaar);
                    if (j > uitleenJaar) {
                        if (maand == 11) {
                            if (m == 0) {
                                if (d <= dag)
                                    return true;
                                else {
                                    parentMenu.setStatusbarText(jlStatusbar, "De verloopdatum kan maximaal een maand na de uitleendatum zijn", Color.RED);
                                    return false;
                                }
                            }
                            else {
                                parentMenu.setStatusbarText(jlStatusbar, "De verloopdatum kan maximaal een maand na de uitleendatum zijn", Color.RED);
                                return false;
                            }
                        }
                        else {
                            parentMenu.setStatusbarText(jlStatusbar, "De verloopdatum kan maximaal een maand na de uitleendatum zijn", Color.RED);
                            return false;
                        }
                    }
                    else {
                        if (m - maand == 0)
                            return true;
                        else if (m - maand == 1)
                            if (d <= dag)
                                return true;
                            else {
                                parentMenu.setStatusbarText(jlStatusbar, "De verloopdatum kan maximaal een maand na de uitleendatum zijn", Color.RED);
                                return false;
                            }
                        else {
                            parentMenu.setStatusbarText(jlStatusbar, "De verloopdatum kan maximaal een maand na de uitleendatum zijn", Color.RED);
                            return false;
                        }
                    }
                }
                else if (gcUitleendatum == null)
                    parentMenu.setStatusbarText(jlStatusbar, "Geen geldige uitleendatum bekend", Color.RED);
                else
                    parentMenu.setStatusbarText(jlStatusbar, "Verloopdatum kan alleen na de uitleendatum zijn", Color.RED);
            }
            return false;
        }
        return false;
    }

    private boolean valideerUitleendatum(boolean wijzigen)
    {
        GregorianCalendar gc;
        Calendar c;
        int dag, maand, jaar;

        if (parentMenu.maakDatumString(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar) == null) {
            parentMenu.setStatusbarText(jlStatusbar, "Ongeldige uitleendatum", Color.RED);
            return false;
        }
        dag = jcbUitleendatumDag.getSelectedIndex();
        maand = jcbUitleendatumMaand.getSelectedIndex() - 1;
        jaar = Integer.parseInt((String)jcbUitleendatumJaar.getSelectedItem());
        gc = new GregorianCalendar(jaar, maand, dag);
        c = Calendar.getInstance();
        if (!wijzigen && jaar < c.get(Calendar.YEAR))
        {
            parentMenu.setStatusbarText(jlStatusbar, "Uitleendatum ligt in het verleden", Color.RED);
            return false;
        }
        else if (jaar == c.get(Calendar.YEAR))
        {
            if (!wijzigen && maand < c.get(Calendar.MONTH))
            {
                parentMenu.setStatusbarText(jlStatusbar, "Uitleendatum ligt in het verleden", Color.RED);
                return false;
            }
            else if (maand == c.get(Calendar.MONTH))
            {
                if (!wijzigen && dag < c.get(Calendar.DAY_OF_MONTH))
                {
                    parentMenu.setStatusbarText(jlStatusbar, "Uitleendatum ligt in het verleden", Color.RED);
                    return false;
                }
            }
            else if (maand == c.get(Calendar.MONTH) + 1)
            {
                if (dag > c.get(Calendar.DAY_OF_MONTH))
                {
                    parentMenu.setStatusbarText(jlStatusbar, "Een reservering kan maximaal een maand van tevoren", Color.RED);
                    return false;
                }
            }
            else
            {
                parentMenu.setStatusbarText(jlStatusbar, "Een reservering kan maximaal een maand van tevoren", Color.RED);
                return false;
            }
        }
        else if (jaar == c.get(Calendar.YEAR) + 1)
        {
            if (maand < 11)
            {
                parentMenu.setStatusbarText(jlStatusbar, "Een reservering kan maximaal een maand van tevoren", Color.RED);
                return false;
            }
        }
        else if (gc.after(c))
        {
            parentMenu.setStatusbarText(jlStatusbar, "Een reservering kan maximaal een maand van tevoren", Color.RED);
            return false;
        }
        return true;
    }

    private boolean valideerInleverdatum()
    {
        GregorianCalendar gcInleverdatum, gcUitleendatum;
        int dag = jcbInleverdatumDag.getSelectedIndex();
        int maand = jcbInleverdatumMaand.getSelectedIndex() - 1;
        String jaar = (String)jcbInleverdatumJaar.getSelectedItem();

        if (parentMenu.maakDatumString(jcbInleverdatumDag, jcbInleverdatumMaand, jcbInleverdatumJaar) == null)
            return true;
        gcInleverdatum = new GregorianCalendar(Integer.parseInt(jaar), maand, dag);
        dag = jcbUitleendatumDag.getSelectedIndex();
        maand = jcbUitleendatumMaand.getSelectedIndex() - 1;
        jaar = (String)jcbUitleendatumJaar.getSelectedItem();
        if (parentMenu.maakDatumString(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar) == null) {
            parentMenu.setStatusbarText(jlStatusbar, "Ongeldige uitleendatum", Color.RED);
            return false;
        }
        gcUitleendatum = new GregorianCalendar(Integer.parseInt(jaar), maand, dag);
        if (gcUitleendatum != null && !gcInleverdatum.before(gcUitleendatum))
            return true;
        else
        {
            parentMenu.setStatusbarText(jlStatusbar, "Inleverdatum kan alleen na de uitleendatum zijn", Color.RED);
            return false;
        }
    }

    private void parseDatum(JComboBox jcbDag, JComboBox jcbMaand, JComboBox jcbJaar, String datum) {
        Scanner s;
        int jaar;

        if (datum == null || datum.isEmpty()) {
            jcbDag.setSelectedIndex(0);
            jcbMaand.setSelectedIndex(0);
            jcbJaar.setSelectedIndex(0);
            return;
        }
        s = new Scanner(datum);
        s.useDelimiter("-");
        if (s.hasNextInt()){
            jaar = s.nextInt();
            if (jaar > BeheerMenu.OPRICHTJAAR)
                jcbJaar.setSelectedIndex(1 + jaar - BeheerMenu.OPRICHTJAAR);
            else
                jcbJaar.setSelectedIndex(1 + BeheerMenu.OPRICHTJAAR - jaar);
            if (s.hasNextInt()) {
                jcbMaand.setSelectedIndex(s.nextInt());
                if (s.hasNextInt())
                    jcbDag.setSelectedIndex(s.nextInt());
                else
                    jcbDag.setSelectedIndex(0);
            }
            else
                jcbUitleendatumMaand.setSelectedIndex(0);
        }
        else
            jcbJaar.setSelectedIndex(0);
    }

    void toonUitlening(Uitlening u) {
        if (u != null) {
            uitlening = u;
            jtfLidnummer.setText(Integer.toString(u.getLidnummer()));
            jtfSpeelgoedCode.setText(u.getSpeelgoedCode());
            parseDatum(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar, u.getUitleendatum());
            parseDatum(jcbVerloopdatumDag, jcbVerloopdatumMaand, jcbVerloopdatumJaar, u.getVerloopdatum());
            parseDatum(jcbInleverdatumDag, jcbInleverdatumMaand, jcbInleverdatumJaar, u.getInleverdatum());
            jtaBijzonderheden.setText(u.getBijzonderheden());
            if (soortBewerking == soortBewerking.WIJZIGEN)
                hash = getHash();
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jlTitel = new javax.swing.JLabel();
        jlStatusbar = new javax.swing.JLabel();
        jbAnnuleren = new javax.swing.JButton();
        jbOpslaan = new javax.swing.JButton();
        jtfLidnummer = new javax.swing.JTextField();
        jlLidnummer = new javax.swing.JLabel();
        jbZoekLid = new javax.swing.JButton();
        jcbUitleendatumDag = new javax.swing.JComboBox();
        jcbUitleendatumMaand = new javax.swing.JComboBox();
        jlUitleendatum = new javax.swing.JLabel();
        jcbUitleendatumJaar = new javax.swing.JComboBox();
        jtfSpeelgoedCode = new javax.swing.JTextField();
        jlSpeelgoedCode = new javax.swing.JLabel();
        jbZoekSpeelgoedCode = new javax.swing.JButton();
        jcbVerloopdatumJaar = new javax.swing.JComboBox();
        jlVerloopdatum = new javax.swing.JLabel();
        jcbVerloopdatumMaand = new javax.swing.JComboBox();
        jcbVerloopdatumDag = new javax.swing.JComboBox();
        jcbInleverdatumJaar = new javax.swing.JComboBox();
        jcbInleverdatumDag = new javax.swing.JComboBox();
        jlInleverdatum = new javax.swing.JLabel();
        jcbInleverdatumMaand = new javax.swing.JComboBox();
        jlBijzonderheden = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jtaBijzonderheden = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jlTitel.setFont(new java.awt.Font("Tahoma", 1, 24));
        jlTitel.setText("Uitlening");

        jlStatusbar.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jbAnnuleren.setText("Annuleren");
        jbAnnuleren.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbAnnulerenActionPerformed(evt);
            }
        });

        jbOpslaan.setText("Opslaan");
        jbOpslaan.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbOpslaanActionPerformed(evt);
            }
        });

        jtfLidnummer.setHorizontalAlignment(javax.swing.JTextField.CENTER);

        jlLidnummer.setText("Lidnummer");

        jbZoekLid.setText("Zoek");
        jbZoekLid.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbZoekLidActionPerformed(evt);
            }
        });

        jcbUitleendatumMaand.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jcbUitleendatumMaandActionPerformed(evt);
            }
        });

        jlUitleendatum.setText("Uitleendatum");

        jcbUitleendatumJaar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jcbUitleendatumJaarActionPerformed(evt);
            }
        });

        jtfSpeelgoedCode.setHorizontalAlignment(javax.swing.JTextField.CENTER);

        jlSpeelgoedCode.setText("Speelgoedcode");

        jbZoekSpeelgoedCode.setText("Zoek");
        jbZoekSpeelgoedCode.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbZoekSpeelgoedCodeActionPerformed(evt);
            }
        });

        jcbVerloopdatumJaar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jcbVerloopdatumJaarActionPerformed(evt);
            }
        });

        jlVerloopdatum.setText("Verloopdatum");

        jcbVerloopdatumMaand.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jcbVerloopdatumMaandActionPerformed(evt);
            }
        });

        jcbInleverdatumJaar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jcbInleverdatumJaarActionPerformed(evt);
            }
        });

        jlInleverdatum.setText("Inleverdatum");

        jcbInleverdatumMaand.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jcbInleverdatumMaandActionPerformed(evt);
            }
        });

        jlBijzonderheden.setText("Bijzonderheden");

        jtaBijzonderheden.setColumns(20);
        jtaBijzonderheden.setRows(5);
        jtaBijzonderheden.setBorder(null);
        jScrollPane1.setViewportView(jtaBijzonderheden);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jlStatusbar, javax.swing.GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addGap(38, 38, 38)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jlTitel)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jlLidnummer)
                            .addComponent(jlUitleendatum)
                            .addComponent(jlInleverdatum)
                            .addComponent(jlSpeelgoedCode)
                            .addComponent(jlVerloopdatum))
                        .addGap(11, 11, 11)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jtfSpeelgoedCode, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jbZoekSpeelgoedCode))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jtfLidnummer, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jbZoekLid))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jcbUitleendatumDag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jcbVerloopdatumDag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jcbInleverdatumDag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jcbUitleendatumMaand, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jcbVerloopdatumMaand, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jcbInleverdatumMaand, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(14, 14, 14)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jcbUitleendatumJaar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jcbVerloopdatumJaar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jcbInleverdatumJaar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jlBijzonderheden)
                            .addGap(18, 18, 18)
                            .addComponent(jScrollPane1))
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                            .addGap(14, 14, 14)
                            .addComponent(jbOpslaan, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jbAnnuleren, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(72, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jlTitel)
                .addGap(37, 37, 37)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jtfLidnummer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jbZoekLid)
                    .addComponent(jlLidnummer))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jtfSpeelgoedCode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jbZoekSpeelgoedCode)
                    .addComponent(jlSpeelgoedCode))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jcbUitleendatumDag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jlUitleendatum))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jcbVerloopdatumDag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jlVerloopdatum))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jcbInleverdatumDag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jlInleverdatum)))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jcbUitleendatumJaar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jcbVerloopdatumJaar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jcbInleverdatumJaar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jcbUitleendatumMaand, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jcbVerloopdatumMaand, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jcbInleverdatumMaand, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(26, 26, 26)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jlBijzonderheden))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jbOpslaan)
                    .addComponent(jbAnnuleren))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 43, Short.MAX_VALUE)
                .addComponent(jlStatusbar, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jbAnnulerenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbAnnulerenActionPerformed
        this.setVisible(false);
        parentMenu.setVisible(true);
}//GEN-LAST:event_jbAnnulerenActionPerformed

    private void jbOpslaanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbOpslaanActionPerformed
        ArrayList<ArrayList<String>> list = null;
        String lidnr, code, uitleendatum, verloopdatum, bijzonderheden;

        if (jbOpslaan.getText().equals("Zoeken")) {
            lidnr = jtfLidnummer.getText();
            code = jtfSpeelgoedCode.getText();

            if (!(lidnr.isEmpty() || parentMenu.isTekstNumeriek(lidnr))) {
                parentMenu.setStatusbarText(jlStatusbar, "Ongeldig lidnummer", Color.RED);
                return;
            }
            if (!(code.isEmpty() || parentMenu.isGeldigeSpeelgoedCode(code))) {
                parentMenu.setStatusbarText(jlStatusbar, "Ongeldige speelgoedcode", Color.RED);
                return;
            }
            uitleendatum = parentMenu.maakDatumString(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar);
            if (uitleendatum != null)
                list = parentMenu.databaseConnectie.query("select * from uitlening u where u.fk_lidnr like '" + lidnr + "%' and u.fk_code like '" + code +
                        "%' and u.uitleendatum = '" + uitleendatum + "'");
            else
                list = parentMenu.databaseConnectie.query("select * from uitlening u where u.fk_lidnr like '" + lidnr + "%' and u.fk_code like '" + code + "%'");
            if (list != null && list.size() > 0) {
                parentMenu.zoekResultaten.initialiseerZoekScherm(this, soortBewerking, list);
                parentMenu.zoekResultaten.setLocationRelativeTo(null);
                parentMenu.zoekResultaten.setVisible(true);
                this.setVisible(false);
            }
            else
                parentMenu.setStatusbarText(jlStatusbar, "Geen uitleningen gevonden", Color.RED);
        }

        if (jbOpslaan.getText().equals("Opslaan")) {
            lidnr = jtfLidnummer.getText();
            code = jtfSpeelgoedCode.getText();
            if (parentMenu.isTekstNumeriek(lidnr) && parentMenu.isGeldigeSpeelgoedCode(code) && valideerUitleendatum(false) && valideerVerloopdatum()) {
                uitleendatum = parentMenu.maakDatumString(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar);
                verloopdatum = parentMenu.maakDatumString(jcbVerloopdatumDag, jcbVerloopdatumMaand, jcbVerloopdatumJaar);
                bijzonderheden = jtaBijzonderheden.getText();
                if (parentMenu.databaseConnectie.query("select l.lidnr from lid l where l.lidnr = " + jtfLidnummer.getText()).size() > 0) {
                    list = parentMenu.databaseConnectie.query("select s.code from speelgoed s where s.code = '" + jtfSpeelgoedCode.getText() + "'");
                    if (list != null && list.size() > 0) {
                        list = parentMenu.databaseConnectie.query("select * from uitlening u where u.fk_lidnr = " + jtfLidnummer.getText() +
                               " and u.fk_code = '" + jtfSpeelgoedCode.getText() + "' and u.uitleendatum = '" + uitleendatum + "'");
                        if (list.size() <= 0) {
                            list = parentMenu.databaseConnectie.query("select fk_lidnr, verloopdatum from uitlening u where fk_code = '" + code + "' and inleverdatum is null");
                            if (list == null || list.size() <= 0) {
                                parentMenu.databaseConnectie.prepareStatement("insert into uitlening (fk_lidnr, fk_code, uitleendatum, verloopdatum, bijzonderheden) values (?, ?, ?, ?, ?)");
                                parentMenu.databaseConnectie.setInt(1, Integer.parseInt(lidnr));
                                parentMenu.databaseConnectie.setString(2, code);
                                parentMenu.databaseConnectie.setString(3, uitleendatum);
                                parentMenu.databaseConnectie.setString(4, verloopdatum);
                                parentMenu.databaseConnectie.setString(5, bijzonderheden);
                                if (parentMenu.databaseConnectie.update() != -1) {
                                    this.setVisible(false);
                                    parentMenu.setVisible(true);
                                    parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Uitlening is toegevoegd", Color.BLACK);
                                }
                                else
                                    parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Uitlening kan niet worden toegevoegd", Color.RED);
                            }
                            else
                                parentMenu.setStatusbarText(jlStatusbar, "Status is uitgeleend, weer beschikbaar na " + list.get(0).get(1), Color.RED);
                        }
                        else
                            parentMenu.setStatusbarText(jlStatusbar, "Deze uitlening bestaat al", Color.RED);
                    }
                    else
                        parentMenu.setStatusbarText(jlStatusbar, "Speelgoed code niet gevonden", Color.RED);
                }
                else
                    parentMenu.setStatusbarText(jlStatusbar, "Lid niet gevonden", Color.RED);
            }
        }
        else if (jbOpslaan.getText().equals("Wijzigen")) {
            Uitlening u;
            String inleverdatum;
            int resultaat, h = getHash();

            if (hash == h) {
                parentMenu.setStatusbarText(jlStatusbar, "Uitlening is ongewijzigd", Color.RED);
                return;
            }
            lidnr = jtfLidnummer.getText();
            code = jtfSpeelgoedCode.getText();
            if (parentMenu.isTekstNumeriek(lidnr) && parentMenu.isGeldigeSpeelgoedCode(code) && valideerUitleendatum(true) && valideerVerloopdatum() && valideerInleverdatum()) {
                uitleendatum = parentMenu.maakDatumString(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar);
                verloopdatum = parentMenu.maakDatumString(jcbVerloopdatumDag, jcbVerloopdatumMaand, jcbVerloopdatumJaar);
                inleverdatum = parentMenu.maakDatumString(jcbInleverdatumDag, jcbInleverdatumMaand, jcbInleverdatumJaar);
                bijzonderheden = jtaBijzonderheden.getText();
                if (bijzonderheden.isEmpty())
                    bijzonderheden = null;
                list = parentMenu.databaseConnectie.query("select l.lidnr from lid l where l.lidnr = " + lidnr);
                if (list != null & list.size() > 0) {
                    list = parentMenu.databaseConnectie.query("select * from speelgoed s where s.code = '" + code + "'");
                    if (list != null && list.size() > 0) {
                        /* Wanneer de code wordt gewijzigd, mag het speelgoed niet al uitgeleend zijn
                        /* Wanneer de code ongewijzigd is, is dit uiteraard niet van toepassing
                         */
                        list = parentMenu.databaseConnectie.query("select id, fk_lidnr, verloopdatum from uitlening u where fk_code = '" + code + "' and inleverdatum is null");
                        if ((!(code.equals(uitlening.getSpeelgoedCode()) || (list != null && list.size() > 0))) || code.equals(uitlening.getSpeelgoedCode())) {
                            u = new Uitlening();
                            u.setLidnummer(Integer.parseInt(lidnr));
                            u.setSpeelgoedCode(code);
                            u.setUitleendatum(uitleendatum);
                            u.setVerloopdatum(verloopdatum);
                            u.setInleverdatum(inleverdatum);
                            u.setBijzonderheden(bijzonderheden);
                            parseQuery(u);
                            resultaat = parentMenu.databaseConnectie.update();
                            if (resultaat != -1)
                            {
                                hash = h;
                                parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Uitlening is gewijzigd", Color.BLACK);
                                this.setVisible(false);
                                parentMenu.setVisible(true);
                            }
                            else
                               parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Er is een onbekende fout opgetreden tijdens het opslaan van de wijzigingen", Color.RED);
                        }
                        else
                            parentMenu.setStatusbarText(jlStatusbar, "Dit stuk speelgoed is momenteel uitgeleend", Color.RED);
                    }
                    else
                        parentMenu.setStatusbarText(jlStatusbar, "Speelgoed code niet gevonden", Color.RED);
                }
                else
                    parentMenu.setStatusbarText(jlStatusbar, "Lid niet gevonden", Color.RED);
            }
        }
        else if (jbOpslaan.getText().equals("Verwijderen")) {
            parentMenu.databaseConnectie.prepareStatement("delete from uitlening where id = ?");
            parentMenu.databaseConnectie.setInt(1, uitlening.getId());
            if (parentMenu.databaseConnectie.update() != -1)
                parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Uitlening verwijderd", Color.BLACK);
            else
                parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Uitlening kan niet worden verwijderd", Color.RED);
            this.setVisible(false);
            parentMenu.setVisible(true);
        }
        else if (jbOpslaan.getText().equals("Toon")) {
            if (soortBewerking == BeheerMenu.BewerkFunctie.LID_OVERZICHT) {
                lidnr = jtfLidnummer.getText();

                if (lidnr.isEmpty() || !parentMenu.isTekstNumeriek(lidnr)) {
                    parentMenu.setStatusbarText(jlStatusbar, "Ongeldig lidnummer", Color.RED);
                    return;
                }
                uitleendatum = (soortBewerking == BeheerMenu.BewerkFunctie.LID_OVERZICHT) ? parentMenu.maakDatumString(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar) : null;
                if (uitleendatum == null)
                    list = parentMenu.databaseConnectie.query("select u.id, u.fk_code, u.uitleendatum, u.verloopdatum, u.inleverdatum, u.bijzonderheden from uitlening u where u.fk_lidnr = " + lidnr + " order by u.uitleendatum, u.fk_code");
                else
                    list = parentMenu.databaseConnectie.query("select u.id, u.fk_code, u.uitleendatum, u.verloopdatum, u.inleverdatum, u.bijzonderheden from uitlening u where u.fk_lidnr = " + lidnr + " and u.uitleendatum = '" + uitleendatum + "' order by u.uitleendatum, u.fk_code");
            }
            else {
                code = jtfSpeelgoedCode.getText();

                if (code.isEmpty() || !parentMenu.isGeldigeSpeelgoedCode(code)) {
                    parentMenu.setStatusbarText(jlStatusbar, "Ongeldige speelgoed code", Color.RED);
                    return;
                }
                list = parentMenu.databaseConnectie.query("select u.id, u.fk_lidnr, u.uitleendatum, u.verloopdatum, u.inleverdatum, u.bijzonderheden from uitlening u where u.fk_code = '" + code + "' order by u.uitleendatum");
            }
            if (list != null && list.size() > 0){
                parentMenu.overzichtenScherm.initialiseerOverzichtenScherm(this, soortBewerking, list);
                this.setVisible(false);
                parentMenu.overzichtenScherm.setLocationRelativeTo(null);
                parentMenu.overzichtenScherm.setVisible(true);
            }
            else
                parentMenu.setStatusbarText(jlStatusbar, "Geen uitleningen gevonden", Color.RED);
        }
}//GEN-LAST:event_jbOpslaanActionPerformed

    private void jcbUitleendatumMaandActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jcbUitleendatumMaandActionPerformed
        parentMenu.setDatumVelden(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar);
    }//GEN-LAST:event_jcbUitleendatumMaandActionPerformed

    private void jcbVerloopdatumMaandActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jcbVerloopdatumMaandActionPerformed
        parentMenu.setDatumVelden(jcbVerloopdatumDag, jcbVerloopdatumMaand, jcbVerloopdatumJaar);
    }//GEN-LAST:event_jcbVerloopdatumMaandActionPerformed

    private void jcbInleverdatumMaandActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jcbInleverdatumMaandActionPerformed
        parentMenu.setDatumVelden(jcbInleverdatumDag, jcbInleverdatumMaand, jcbInleverdatumJaar);
    }//GEN-LAST:event_jcbInleverdatumMaandActionPerformed

    private void jbZoekLidActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbZoekLidActionPerformed
        String lidnr = jtfLidnummer.getText();
        ArrayList<ArrayList<String>> list = null;

        if (lidnr.isEmpty() || parentMenu.isTekstNumeriek(lidnr)) {
            list = parentMenu.databaseConnectie.query("select * from lid l where l.lidnr like '" + lidnr + "%'");
            if (list != null && list.size() > 0) {
                parentMenu.zoekResultaten.initialiseerZoekScherm(this, soortBewerking.LIDNUMMER, list);
                setVisible(false);
                parentMenu.zoekResultaten.setLocationRelativeTo(null);
                parentMenu.zoekResultaten.setVisible(true);
            }
        }
        if (list == null || list.size() <= 0)
            parentMenu.setStatusbarText(jlStatusbar, "Geen lid gevonden", Color.RED);
    }//GEN-LAST:event_jbZoekLidActionPerformed

    private void jbZoekSpeelgoedCodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbZoekSpeelgoedCodeActionPerformed
        String code = jtfSpeelgoedCode.getText();
        ArrayList<ArrayList<String>> list = null;

        if (code.isEmpty() || Character.isLetter(code.charAt(0))) {
            if (jbOpslaan.getText().equals("Opslaan") || jbOpslaan.getText().equals("Wijzigen"))
                list = parentMenu.databaseConnectie.query("select * from speelgoed s where s.code not in (select u.fk_code from uitlening u where inleverdatum is null)");
            else
                list = parentMenu.databaseConnectie.query("select * from speelgoed s where s.code like '" + code + "%'");
            if (list != null && list.size() > 0) {
                parentMenu.zoekResultaten.initialiseerZoekScherm(this, soortBewerking.SPEELGOED_CODE, list);
                setVisible(false);
                parentMenu.zoekResultaten.setLocationRelativeTo(null);
                parentMenu.zoekResultaten.setVisible(true);
            }
        }
        if (list == null || list.size() <= 0)
            parentMenu.setStatusbarText(jlStatusbar, "Geen speelgoed gevonden", Color.RED);
    }//GEN-LAST:event_jbZoekSpeelgoedCodeActionPerformed

    private void jcbUitleendatumJaarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jcbUitleendatumJaarActionPerformed
        parentMenu.setDatumVelden(jcbUitleendatumDag, jcbUitleendatumMaand, jcbUitleendatumJaar);
    }//GEN-LAST:event_jcbUitleendatumJaarActionPerformed

    private void jcbVerloopdatumJaarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jcbVerloopdatumJaarActionPerformed
        parentMenu.setDatumVelden(jcbVerloopdatumDag, jcbVerloopdatumMaand, jcbVerloopdatumJaar);
    }//GEN-LAST:event_jcbVerloopdatumJaarActionPerformed

    private void jcbInleverdatumJaarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jcbInleverdatumJaarActionPerformed
        parentMenu.setDatumVelden(jcbInleverdatumDag, jcbInleverdatumMaand, jcbInleverdatumJaar);
    }//GEN-LAST:event_jcbInleverdatumJaarActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton jbAnnuleren;
    private javax.swing.JButton jbOpslaan;
    private javax.swing.JButton jbZoekLid;
    private javax.swing.JButton jbZoekSpeelgoedCode;
    private javax.swing.JComboBox jcbInleverdatumDag;
    private javax.swing.JComboBox jcbInleverdatumJaar;
    private javax.swing.JComboBox jcbInleverdatumMaand;
    private javax.swing.JComboBox jcbUitleendatumDag;
    private javax.swing.JComboBox jcbUitleendatumJaar;
    private javax.swing.JComboBox jcbUitleendatumMaand;
    private javax.swing.JComboBox jcbVerloopdatumDag;
    private javax.swing.JComboBox jcbVerloopdatumJaar;
    private javax.swing.JComboBox jcbVerloopdatumMaand;
    private javax.swing.JLabel jlBijzonderheden;
    private javax.swing.JLabel jlInleverdatum;
    private javax.swing.JLabel jlLidnummer;
    private javax.swing.JLabel jlSpeelgoedCode;
    private javax.swing.JLabel jlStatusbar;
    private javax.swing.JLabel jlTitel;
    private javax.swing.JLabel jlUitleendatum;
    private javax.swing.JLabel jlVerloopdatum;
    private javax.swing.JTextArea jtaBijzonderheden;
    javax.swing.JTextField jtfLidnummer;
    javax.swing.JTextField jtfSpeelgoedCode;
    // End of variables declaration//GEN-END:variables

    // Hier wordt een verwijzing naar het beheermenu opgenomen zodat we
    // vanuit dit scherm terug kunnen keren naar het beheermenu
    private BeheerMenu parentMenu;

    // Hier wordt de enumeratie opgeslagen die bepaald welke functie wordt
    // uitgevoerd zodra men een object heeft geselecteerd in het zoekscherm.
    private BeheerMenu.BewerkFunctie soortBewerking;
}
